﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Entities_Layer;
using System.Collections;
using System.Transactions;
using System.Data.SqlClient;
using System.Data;
using DAL.Repositories;

namespace DAL.Repositories
{
    public class EstrellaRepository : IRepository<Estrella>
    {

        private List<IEntity> _insertItems;
        private List<IEntity> _updateItems;

        public EstrellaRepository()
        {
            _insertItems = new List<IEntity>();

        }

        public void Insert(Estrella entity)
        {
            _insertItems.Add(entity);
        }

        public void Update(Estrella entity)
        {
            _updateItems.Add(entity);
        }

        public IEnumerable<Estrella> GetAll()
        {


            List<Estrella> listaEstrellas = null;

            SqlCommand cmd = new SqlCommand();
            DataSet ds = DBAccess.ExecuteSPWithDS(ref cmd, "pa_listar_estrellas");

            

            if (ds.Tables[0].Rows.Count > 0)
            {
                listaEstrellas = new List<Estrella>();

                foreach (DataRow dr in ds.Tables[0].Rows)
                {
                    listaEstrellas.Add(new Estrella
                    {
                        Nombre = dr["nombre"].ToString(),
                        Tipo = dr["tipo"].ToString(),
                        Masa = Convert.ToDouble(dr["masa"]),
                        TemperaturaMedia = Convert.ToDouble(dr["temperatura_media"]),
                        DuracionDia = Convert.ToDouble(dr["duracion_dia"]),
                        Edad = Convert.ToDouble(dr["edad"]),
                        Composicion = dr["composicion"].ToString(),
                        IntensidadLuminica = Convert.ToDouble(dr["luminosidad"]),
                        Tamano = Convert.ToDouble(dr["tamano"])
                    });
                }
            }

            return listaEstrellas;
        }

  
        public void Save()
        {
            using (TransactionScope scope = new TransactionScope())
            {
                try
                {
                    if (_insertItems.Count > 0)
                    {
                        foreach (Estrella objEstrella in _insertItems)
                        {
                            InsertEstrella(objEstrella);
                        }
                    }

                    scope.Complete();
                }
                catch (TransactionAbortedException ex)
                {

                }
                catch (ApplicationException ex)
                {

                }
                finally
                {
                    Clear();
                }

            }
        }


        public void Clear()
        {
            _insertItems.Clear();

        }

        private void InsertEstrella(Estrella objEstrella)
        {

            try
            {
                SqlCommand cmd = new SqlCommand();

                cmd.Parameters.Add(new SqlParameter("@nombre", objEstrella.Nombre));
                cmd.Parameters.Add(new SqlParameter("@tipo", objEstrella.Tipo));
                cmd.Parameters.Add(new SqlParameter("@masa", objEstrella.Masa));
                cmd.Parameters.Add(new SqlParameter("@temperatura_media", objEstrella.TemperaturaMedia));
                cmd.Parameters.Add(new SqlParameter("@duracion_dia", objEstrella.DuracionDia));
                cmd.Parameters.Add(new SqlParameter("@edad", objEstrella.Edad));
                cmd.Parameters.Add(new SqlParameter("@composicion", objEstrella.Composicion));
                cmd.Parameters.Add(new SqlParameter("@luminosidad", objEstrella.Edad));
                 cmd.Parameters.Add(new SqlParameter("@tamano", objEstrella.Tamano));

                DataSet ds = DBAccess.ExecuteSPWithDS(ref cmd, "pa_agregar_estrella");

            }
            catch (Exception ex)
            {

            }

        }














    }
}
